package com.utn.disenio.entrega2;

import java.util.ArrayList;
import java.util.Iterator;


import com.utn.disenio.entrega3.Filtrar;
import com.utn.disenio.entrega3.Ordenar;
import com.utn.disenio.entrega3.Viaje;



public abstract class Usuario {
	
	/* Datos del Usuario */
	protected String nombre;
	protected String apellido;
	protected String dni;
	protected ArrayList<Asiento> asientosReservados;
	
	
	public String getDni() {
		return dni;
	}
	
	protected SistemaAterrizarPuntoCom sistema;
	
	protected ArrayList<Asiento> historialDeBusquedas; /* <---- Array de asientos */ 
	
	
	public Usuario(String nombre, String apellido, String dni)
	{
		this.nombre = nombre;
		this.apellido = apellido;
		this.dni = dni;
		this.sistema = SistemaAterrizarPuntoCom.getInstance();
		this.historialDeBusquedas = new ArrayList<Asiento>();
	}
	
	public ArrayList<Viaje> buscarAsientosDisponibles(String origen, String destino, String salida, String horaSalida, String llegada, String horaLlegada,Integer cantEscalas, Ordenar orden, Filtrar filtros) throws Exception
	{
		ArrayList<Viaje> busqueda = this.sistema.buscarAsientos(origen, destino, salida, horaSalida, llegada, horaLlegada,cantEscalas, this,orden,filtros);
		
		Iterator<Viaje> viajeIterator = busqueda.iterator();
		while(viajeIterator.hasNext())
		{
			Viaje viaje = viajeIterator.next();
			
			if(viaje.getAsientoUno()!=null)
				this.historialDeBusquedas.add(viaje.getAsientoUno());
			
			if(viaje.getAsientoDos()!=null)
				this.historialDeBusquedas.add(viaje.getAsientoDos());
			
			if(viaje.getAsientoTres()!=null)
				this.historialDeBusquedas.add(viaje.getAsientoTres());
			
		}
		return busqueda;
	}
	
	public void comprarAsiento(Asiento unAsiento) throws Exception{
			sistema.comprar(unAsiento, this);
			
	}
	
	public void reservarAsiento(Asiento unAsiento)
	{
		return; /* Podria imprimir por pantalla que no puede reservar asientos */
	}
	
	
	public abstract Boolean puedeListar(Asiento unAsiento);
	public abstract float impuestoAdicional();
	
}
